/*
 *
 *
 *
 */
#include <iostream>
#include <SDL/SDL.h>
#include "Sprite.h"
#include "Singleton.h"

#ifndef _INPUTMANAGER_H_
#define _INPUTMANAGER_H_

#define KEY_SYM_MAX 400     /*valor máximo de uma tecla definidas em <SDL/SDL_keysym.h>*/
#define MOUSE_BUTTON_MAX 10 /*valor máximo de um botão do mouse definidos em <SDL/SDL_mouse.h>*/

/*abaixo estão os índices padrões utilizados nas matrizes*/
#define PRESSED 0
#define DOWN 1
#define UP 2

using namespace std;

class InputManager
{
    private:
        bool keyState[3][KEY_SYM_MAX];          /*matriz que armazena o estado do teclado*/
        bool buttonState[3][MOUSE_BUTTON_MAX];  /*matriz que armazena o estado dos botões do mouse*/
        bool eventQuit;
        Sint16 posX,posY;               /*posição x,y da mouse na tela*/
        InputManager(void);             /*construtor padrão privado*/

    public:
    
        friend class Singleton<InputManager>;   /*Necessário para que a classe InputManager seja um singleton*/
        
        ~InputManager(void);    /*destrutor da única instancia da classe*/
        void poolEvents(void);    /*le todos os eventos e armazena nos arrays correspondentes*/
        bool isEventQuit(void);
        bool isKeyDown(int key);
        bool isKeyUp(int key);
        bool isKeyPressed(int key);
        bool isMouseDown(int key);
        bool isMouseUp(int key);
        bool isMousePressed(int key);
        Sint16 mousePosX(void);
        Sint16 mousePosY(void);
        bool isMouseInside(Sprite *sprite);
        
        
};


#endif

